package com.tistory.wonsama.util.vo;

import java.util.ArrayList;

/**
 * 파일 정보
 * @author wonsama
 * @since 2012.01.20
 */
public class WFileVo {
	
	private String permission;			//퍼미션
	private String inode;				//아이노드
	private String user;					//사용자
	private String group;				//권한그룹
	private String fileSize;				//파일 크기
	private String date;					//파일 수정 시간
	private String fileName;			//파일 명
	
	/**
	 * <pre>
	 * ls -al 의 라인 정보를 VO로 바꿔주도록 한다 
	 * ex) -rw-------  1 wonsama        None  728 Jan 20 11:41 .bash_history
	 * </pre>
	 * @param lineInfo 라인 정보
	 * @return 파일 정보
	 */
	public static WFileVo getFileVo( String lineInfo )
	{
		WFileVo fv = new WFileVo();
		
		try{
			String remain = lineInfo;
			String[] remains = getParseItem(remain);
			
			fv.setPermission( remains[0] );
			remains =  getParseItem( remains[1] );
			
			fv.setInode( remains[0] );
			remains =  getParseItem( remains[1] );
			
			fv.setUser( remains[0] );
			remains =  getParseItem( remains[1] );
			
			fv.setGroup( remains[0] );
			remains =  getParseItem( remains[1] );
			
			fv.setFileSize( remains[0] );
			remains =  getParseItem( remains[1] );
			
			String mm = remains[0];
			remains =  getParseItem( remains[1] );
			
			String dd = remains[0];
			remains =  getParseItem( remains[1] );
			
			String hh24 = remains[0];
			
			fv.setDate( mm + " " + dd + " " + hh24 );
			fv.setFileName( remains[1] );
		}catch (Exception e) {
			//파싱이 되지 않는 경우는 FILE NAME에 NULL이 셋팅되어 있음. !
			//오류 발생 경우 파싱을 못하는 경우가 위에 해당함.
			return fv;
		}
		
		return fv;
	}

	/**
	 * 남겨진 정보를 파싱하여 기록한다
	 * 0 : 값 , 1 : 남은거
	 * @param remain 남은 정보
	 * @return 파싱결과
	 */
	private static String[] getParseItem( String remain )
	{
		ArrayList<String> str = new ArrayList<String>();
		
		int idxItem = remain.indexOf(" ");
		String item = remain.substring( 0 , idxItem  );
		remain = remain.substring( idxItem ).trim();
		
		str.add(item);
		str.add(remain);
		
		String[] rtn = new String[ str.size() ];
		str.toArray(rtn);
		
		return rtn;
	}
	
	@Override
	public String toString(){
		
		StringBuffer sb = new StringBuffer();
		sb.append("[ Object WFileVo ]\n");
		sb.append( "permission : " + permission + "\n" );
		sb.append( "inode : " + inode + "\n" );
		sb.append( "user : " + user + "\n" );
		sb.append( "group : " + group + "\n" );
		sb.append( "fileSize : " + fileSize + "\n" );
		sb.append( "date : " + date + "\n" );
		sb.append( "fileName : " + fileName + "\n" );
		
		return sb.toString();
	}
	
	public String getPermission() {
		return permission;
	}
	public void setPermission(String permission) {
		this.permission = permission;
	}
	public String getInode() {
		return inode;
	}
	public void setInode(String inode) {
		this.inode = inode;
	}
	public String getUser() {
		return user;
	}
	public void setUser(String user) {
		this.user = user;
	}
	public String getGroup() {
		return group;
	}
	public void setGroup(String group) {
		this.group = group;
	}
	public String getFileSize() {
		return fileSize;
	}
	public void setFileSize(String fileSize) {
		this.fileSize = fileSize;
	}
	public String getDate() {
		return date;
	}
	public void setDate(String date) {
		this.date = date;
	}

	public String getFileName() {
		return fileName;
	}

	public void setFileName(String fileName) {
		this.fileName = fileName;
	}
	
}
